
(function() {
    try {
        var a = new Uint8Array(1);
        return; //no need
    } catch(e) { }

    function subarray(start, end) {
        return this.slice(start, end);
    }

    function set_(array, offset) {
        if (arguments.length < 2) offset = 0;
        for (var i = 0, n = array.length; i < n; ++i, ++offset)
            this[offset] = array[i] & 0xFF;
    }

    // we need typed arrays
    function TypedArray(arg1) {
        var result;
        if (typeof arg1 === "number") {
            result = new Array(arg1);
            for (var i = 0; i < arg1; ++i)
                result[i] = 0;
        } else
            result = arg1.slice(0);
        result.subarray = subarray;
        result.buffer = result;
        result.byteLength = result.length;
        result.set = set_;
        if (typeof arg1 === "object" && arg1.buffer)
            result.buffer = arg1.buffer;

        return result;
    }

    window.Uint8Array = TypedArray;
    window.Uint32Array = TypedArray;
    window.Int32Array = TypedArray;
})();

/**
 * Classe consumida pelo framework. utilizada para fazer o carregamento inicial da pessa trazendo todos os assets necessários
 *
 * @private
 * @class _preloader
 *  @constructor
 *
 */
function _preloader(arquivos,callback,navegador) {
    /**
     * propriedade que define o estado da animacao princiapal inicial, é necessário que ela seja executada por completo para a peça funcionar
     *
     * @private
     * @property animacaoTerminou
     * @type Boolean
     */
    var animacaoTerminou=false;
    /**
     * propriedade que define o estado do preloader princiapal inicial, é necessário que ele seja finalizado para a peça funcionar
     *
     * @private
     * @property preloaderTerminou
     * @type Boolean
     */
    var preloaderTerminou=false;
    /**
     * Define quantas midias com ID possuimos, auxilia o preloader descobrir se foram carregados todos os assets necessários
     *
     * @private
     * @property qtdDeMediaComId
     * @type int
     */
    var qtdDeMediaComId = 0;
    /**
     * Conforme o preloader carrega uma midia de audio ou video esse valor é incrementado
     *
     * @private
     * @property qtdDeMediaComIdCarregadas
     * @type int
     */
    var qtdDeMediaComIdCarregadas = 0;
    /**
     * Funcao que define verifica se o preloader deve ser finalizado ou não
     *
     * @private
     * @method finalizarPreloader
     */
    var finalizarPreloader = function() {
        qtdDeMediaComIdCarregadas++;
        if (qtdDeMediaComIdCarregadas >= qtdDeMediaComId) {
            preloaderTerminou = true;
        }
    };
    /**
     * aqui será detalhado o funcionamento de cada detalhe das animações de maneira geral
     *
     * @private
     * @method ANIMACAO_PRELOADER

     * @example
     *     var tlAnimacaoEspera = new TimelineLite({paused:true, onComplete:function(){this.restart()}});
     *     // este if, procura um elemento específico que só existe na versão comercial, caso ele exista o preloader irá animar a animação comercial
     *     // caso contrário ele trará a animação PNLD.
     *
     *		 if($('#layer070').length>0){
     *		    //aqui ele define como será animado cada objeto essa animação é uma animação de rotação
     *			elementosAnmPreloader.each(function(idx,obj){
     *				if(idx<65){
     *					if(obj.getBoundingClientRect().width>100){
     *						tlAnimacaoEspera.from(obj, 2, {
     *							rotationY: 180,
     *							force3D: true,
     *							transformOrigin: 'center center',
     *							ease: Back.easeOut
     *						},"-=1.8");
     *					}else{
     *						tlAnimacaoEspera.from(obj, 0.8, {
     *							rotationY: 180,
     *							force3D: true,
     *							transformOrigin: 'center center',
     *							ease: Back.easeOut
     *						},"-=0.75");
     *					}
     *				}
     *			});
     *		//aqui será criada uma animação do tipo TimelineLite é a animação principal, que acontece assim que a peça inicia aqui é apenas a declaração
     *		//as demais definições dela virão depois
     *			var tl = new TimelineLite({
     *				onComplete: function () {
     *					animacaoTerminou = true;
     *					tlAnimacaoEspera.play();
     *				}
     *			});
     *		//	essa animação tlBolinhas, anima as reticências essa animação é fundamental pois é ela que define se a animação principal terminou, e insere o callback no botão iniciar
     *		//	cada vez que ela termina ela se reinicia e fica verificando o que deve ser feito de acordo com os estados do preloader e da animacaoprincipal
     *			var tlBolinhas = new TimelineLite({
     *				onComplete: function () {
     *					if (!preloaderTerminou || !animacaoTerminou) {
     *						this.restart();
     *					} else {
     *						tlBolinhas.pause();
     *						tlAnimacaoEspera.pause();
     *						tl.timeScale(2.5);
     *						tl.reverse();
     *						TweenLite.to($('#layer070'), 0.5, {opacity: 1});
     *						TweenLite.to($('#layer070'), 2.5, {
     *							delay: 0.5, opacity:0, ease: Back.easeInOut, onComplete: function () {
     *								TweenLite.to($('#fw_capa'),2,{ease:Linear.ease, opacity:1,display:'block'});
     *								$('#fw_btn_iniciar_objeto').click(function(){
     *									$('.fw_btn_menu').toggleClass('tooltips');
     *									$(".iniciar").css('display', 'none');
     *									$('#content').css('display', 'block');
     *									$('#fw_fundo').css('display', 'none');
     *									callback();
     *									$('#content').css({"display": "block"});
     *								});
     *							}
     *						})
     *					}
     *				}
     *			});
     *		//toda essa parte define aparição de cada bolinha e o desaparecimento delas, aqui é onde a animação das reticências começa
     *				tlBolinhas.from($('#bolinhas1'), 2, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			});
     *			tlBolinhas.from($('#bolinhas2'), 1, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			}, '-=1');
     *			tlBolinhas.from($('#bolinhas3'), 0.5, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			}, '-=0.5');
     *			tlBolinhas.to($('#bolinhas1'), 0.5, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			});
     *			tlBolinhas.to($('#bolinhas2'), 0.5, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			}, '-=0.4');
     *			tlBolinhas.to($('#bolinhas3'), 0.5, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			}, '-=0.4');
     *		//aqui é a animaçãoprincipal do preloader, e ela tenta filtrar o máximo possível os elementos do SVG
     *			$('#anm_preloader g').each(function (idx, obj) {
     *				var rect = obj.getBoundingClientRect();
     *				//70 = SM
     *				//69 = circulo menor da esquerda
     *				//68 = circulo maior da esquerda
     *				//67 = Quadrado branco SM
     *				//66 = circulo maior branco
     *				//65 = circulo maior
     *				if (idx == 65) {
     *					tl.from(obj, 1.5, {
     *						opacity: 0,
     *						transform: 'scale(0)',
     *						ease: Back.easeInOut,
     *						force3D: true,
     *						transformOrigin: 'center center'
     *					}, '-=1.4')
     *				}
     *				if (idx == 68 || idx == 69) {
     *					tl.from(obj, 1.5, {
     *						opacity: 0,
     *						transform: 'scale(0)',
     *						ease: Back.easeInOut,
     *						force3D: true,
     *						transformOrigin: 'center center'
     *					}, '-=1.4')
     *				}
     *				if (idx == 70) {
     *					TweenLite.set(obj, {opacity: 0})
     *				}
     *				if (idx < 65) {
     *					if (rect.width > 100) {
     *						tl.from(obj, 1.5, {
     *							opacity: 0,
     *							transform: 'scale(0)',
     *							ease: Back.easeInOut,
     *							force3D: true,
     *							transformOrigin: 'center center'
     *						}, '-=1.4')

     *						} else {
     *						tl.from(obj, 1, {
     *							opacity: 0,
     *							transform: 'scale(0)',
     *							ease: Back.easeInOut,
     *							force3D: true,
     *							transformOrigin: 'center center'
     *						}, '-=0.97')
     *					}
     *				}
     *			});
     *			tl.play();		 *
     *		// else para a animação PNLD o processo é bem similar ao anterior
     *		}else{
     *			elementosAnmPreloader.each(function(idx,obj){
     *				if(idx<68){
     *					if(obj.getBoundingClientRect().width>100){
     *						tlAnimacaoEspera.from(obj, 2, {
     *							rotationY: 180,
     *							force3D: true,
     *							transformOrigin: 'center center',
     *							ease: Back.easeOut
     *						},"-=1.8");
     *					}else{
     *						tlAnimacaoEspera.from(obj, 0.8, {
     *							rotationY: 180,
     *							force3D: true,
     *							transformOrigin: 'center center',
     *							ease: Back.easeOut
     *						},"-=0.75");

     *						}
     *				}
     *			});
     *			var tl = new TimelineLite({
     *				onComplete: function () {
     *					animacaoTerminou = true;
     *					tlAnimacaoEspera.play();
     *				}
     *			});
     *			var tlBolinhas = new TimelineLite({
     *				onComplete: function () {
     *					if (!preloaderTerminou || !animacaoTerminou) {
     *						this.restart();
     *					} else {
     *						tlBolinhas.pause();
     *						tlAnimacaoEspera.pause();
     *						tl.timeScale(3);
     *						tl.reverse();

     *							TweenLite.to($('#layer070'), 1, {opacity: 1});
     *						TweenLite.to($('#layer070'), 2.5, {
     *							delay: 0, opacity:0, ease: Back.easeInOut, onComplete: function () {
     *								TweenLite.to($('#fw_capa'),2,{ease:Linear.ease, opacity:1,display:'block'});
     *								$('#fw_btn_iniciar_objeto').click(function(){
     *									$('.fw_btn_menu').toggleClass('tooltips');
     *									$(".iniciar").css('display', 'none');
     *									$('#content').css('display', 'block');
     *									$('#fw_fundo').css('display', 'none');
     *									callback();
     *									$('#content').css({"display": "block"});
     *								});
     *							}
     *						})
     *					}
     *				}
     *			});
     *			tlBolinhas.from($('#bolinhas1'), 2, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			});
     *			tlBolinhas.from($('#bolinhas2'), 1, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			}, '-=1');
     *			tlBolinhas.from($('#bolinhas3'), 0.5, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			}, '-=0.5');
     *			tlBolinhas.to($('#bolinhas1'), 0.5, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			});
     *			tlBolinhas.to($('#bolinhas2'), 0.5, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			}, '-=0.4');
     *			tlBolinhas.to($('#bolinhas3'), 0.5, {
     *				opacity: 0,
     *				transform: 'scale(0)',
     *				ease: Back.easeInOut,
     *				force3D: true,
     *				transformOrigin: 'center center'
     *			}, '-=0.4');
     *			$('#anm_preloader g').each(function (idx, obj) {
     *				var rect = obj.getBoundingClientRect();
     *				//70 = SM
     *				//69 = circulo menor da esquerda
     *				//68 = circulo maior da esquerda
     *				//67 = Quadrado branco SM
     *				//66 = circulo maior branco
     *				//65 = circulo maior
     *				if (idx < 75) {
     *					if (rect.width > 100) {
     *						tl.from(obj, 1.5, {
     *							opacity: 0,
     *							transform: 'scale(0)',
     *							ease: Back.easeInOut,
     *							force3D: true,
     *							transformOrigin: 'center center'
     *						}, '-=1.4')
     *					} else {
     *						tl.from(obj, 1, {
     *							opacity: 0,
     *							transform: 'scale(0)',
     *							ease: Back.easeInOut,
     *							force3D: true,
     *							transformOrigin: 'center center'
     *						}, '-=0.97')
     *					}
     *				}
     *			});		 *
     *			tl.play();
     *		}
     *	}());
     *
     */
    (function() {
        TweenLite.set($('#fw_fundo'), {opacity: 0})
        $('#fw_fundo').css('display','block');
        /**
         * seleciona todos os elementos de #anm_preloader para animá-los de maneira dinâmica,
         *
         * @private
         * @property elementosAnmPreloader
         * @type Array
         */
        var elementosAnmPreloader = $('#anm_preloader g');


        var tlAnimacaoEspera = new TimelineLite({paused:true, onComplete:function(){this.restart()}});
        if($('#layer070').length>0){
            elementosAnmPreloader.each(function(idx,obj){
                if(idx<65){
                    if(obj.getBoundingClientRect().width>100){
                        tlAnimacaoEspera.from(obj, 2, {
                            rotationY: 180,
                            force3D: true,
                            transformOrigin: 'center center',
                            ease: Back.easeOut
                        },"-=1.8");
                    }else{
                        tlAnimacaoEspera.from(obj, 0.8, {
                            rotationY: 180,
                            force3D: true,
                            transformOrigin: 'center center',
                            ease: Back.easeOut
                        },"-=0.75");

                    }
                }
            });

            var tl = new TimelineLite({
                onComplete: function () {
                    animacaoTerminou = true;
                    //se quiser voltar a animação dos quadrados girando só descomentar a linha à baixo
                   // tlAnimacaoEspera.play();
                }
            });
            var tlBolinhas = new TimelineLite({
                onComplete: function () {
                    if (!preloaderTerminou || !animacaoTerminou) {
                        this.restart();
                    } else {
                        tlBolinhas.pause();
                        tlAnimacaoEspera.pause();
                        tl.timeScale(2.5);
                        tl.reverse();
                        TweenLite.to($('#layer070'), 0.5, {opacity: 1});
                        TweenLite.to($('#layer070'), 2.5, {
                            delay: 0.5, opacity:0, ease: Back.easeInOut, onComplete: function () {
                                TweenLite.to($('#fw_capa'),2,{ease:Linear.ease, opacity:1,display:'block'});
                                $('#fw_btn_iniciar_objeto').click(function(){
                                    $('.fw_btn_menu').toggleClass('tooltips');
                                    $(".iniciar").css('display', 'none');
                                    $('#content').css('display', 'block');
                                    $('#fw_fundo').css('display', 'none');
                                    callback();
                                    $('#content').css({"display": "block"});
                                });
                            }
                        })
                    }
                }
            });

            tlBolinhas.from($('#bolinhas1'), 2, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            });
            tlBolinhas.from($('#bolinhas2'), 1, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            }, '-=1');
            tlBolinhas.from($('#bolinhas3'), 0.5, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            }, '-=0.5');
            tlBolinhas.to($('#bolinhas1'), 0.5, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            });
            tlBolinhas.to($('#bolinhas2'), 0.5, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            }, '-=0.4');
            tlBolinhas.to($('#bolinhas3'), 0.5, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            }, '-=0.4');
            $('#anm_preloader g').each(function (idx, obj) {
                TweenLite.set($('#fw_fundo'), {opacity: 1})
                var rect = obj.getBoundingClientRect();
                //70 = SM
                //69 = circulo menor da esquerda
                //68 = circulo maior da esquerda
                //67 = Quadrado branco SM
                //66 = circulo maior branco
                //65 = circulo maior
                if (idx == 65) {
                    tl.from(obj, 1.5, {
                        opacity: 0,
                        transform: 'scale(0)',
                        ease: Back.easeInOut,
                        force3D: true,
                        transformOrigin: 'center center'
                    }, '-=1.4')
                }
                if (idx == 68 || idx == 69) {
                    tl.from(obj, 1.5, {
                        opacity: 0,
                        transform: 'scale(0)',
                        ease: Back.easeInOut,
                        force3D: true,
                        transformOrigin: 'center center'
                    }, '-=1.4')
                }
                if (idx == 70) {
                    TweenLite.set(obj, {opacity: 0})
                }
                if (idx < 65) {
                    if (rect.width > 100) {
                        tl.from(obj, 1.5, {
                            opacity: 0,
                            transform: 'scale(0)',
                            ease: Back.easeInOut,
                            force3D: true,
                            transformOrigin: 'center center'
                        }, '-=1.4')

                    } else {
                        tl.from(obj, 1, {
                            opacity: 0,
                            transform: 'scale(0)',
                            ease: Back.easeInOut,
                            force3D: true,
                            transformOrigin: 'center center'
                        }, '-=0.97')
                    }
                }
            });
            tl.play();


        }else{
            elementosAnmPreloader.each(function(idx,obj){
                if(idx<68){
                    if(obj.getBoundingClientRect().width>100){
                        tlAnimacaoEspera.from(obj, 2, {
                            rotationY: 180,
                            force3D: true,
                            transformOrigin: 'center center',
                            ease: Back.easeOut
                        },"-=1.8");
                    }else{
                        tlAnimacaoEspera.from(obj, 0.8, {
                            rotationY: 180,
                            force3D: true,
                            transformOrigin: 'center center',
                            ease: Back.easeOut
                        },"-=0.75");

                    }
                }
            });



            var tl = new TimelineLite({
                onComplete: function () {
                    animacaoTerminou = true;
                   //se quiser voltar a animação dos quadrados girando só descomentar a linha à baixo
                   // tlAnimacaoEspera.play();
                }
            });


            var tlBolinhas = new TimelineLite({
                onComplete: function () {
                    if (!preloaderTerminou || !animacaoTerminou) {
                        this.restart();
                    } else {
                        tlBolinhas.pause();
                        tlAnimacaoEspera.pause();
                        tl.timeScale(3);
                        tl.reverse();

                        TweenLite.to($('#layer070'), 1, {opacity: 1});
                        TweenLite.to($('#layer070'), 2.5, {
                            delay: 0, opacity:0, ease: Back.easeInOut, onComplete: function () {
                                TweenLite.to($('#fw_capa'),2,{ease:Linear.ease, opacity:1,display:'block'});
                                $('#fw_btn_iniciar_objeto').click(function(){
                                    $('.fw_btn_menu').toggleClass('tooltips');
                                    $(".iniciar").css('display', 'none');
                                    $('#content').css('display', 'block');
                                    $('#fw_fundo').css('display', 'none');
                                    callback();
                                    $('#content').css({"display": "block"});
                                });
                            }
                        })
                    }
                }
            });

            tlBolinhas.from($('#bolinhas1'), 2, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            });
            tlBolinhas.from($('#bolinhas2'), 1, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            }, '-=1');
            tlBolinhas.from($('#bolinhas3'), 0.5, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            }, '-=0.5');
            tlBolinhas.to($('#bolinhas1'), 0.5, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            });
            tlBolinhas.to($('#bolinhas2'), 0.5, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            }, '-=0.4');
            tlBolinhas.to($('#bolinhas3'), 0.5, {
                opacity: 0,
                transform: 'scale(0)',
                ease: Back.easeInOut,
                force3D: true,
                transformOrigin: 'center center'
            }, '-=0.4');
            $('#anm_preloader g').each(function (idx, obj) {
                TweenLite.set($('#fw_fundo'), {opacity: 1})
                var rect = obj.getBoundingClientRect();
                //70 = SM
                //69 = circulo menor da esquerda
                //68 = circulo maior da esquerda
                //67 = Quadrado branco SM
                //66 = circulo maior branco
                //65 = circulo maior

                if (idx < 75) {
                    if (rect.width > 100) {
                        tl.from(obj, 1.5, {
                            opacity: 0,
                            transform: 'scale(0)',
                            ease: Back.easeInOut,
                            force3D: true,
                            transformOrigin: 'center center'
                        }, '-=1.4')

                    } else {
                        tl.from(obj, 1, {
                            opacity: 0,
                            transform: 'scale(0)',
                            ease: Back.easeInOut,
                            force3D: true,
                            transformOrigin: 'center center'
                        }, '-=0.97')
                    }
                }
            });
            tl.play();
        }
    }());

    /**
     * Mapa que define o parte do mimetype baseando-se na extensao
     *
     * @private
     * @property mediaTypes
     * @type Object
     */
    var mediaTypes={
        "mp3": "/mpeg",
        "mp4": "/mp4",
        "ogg": "/ogg",
        "wav": "/wav"
    }
    /**
     * define o source que deve ser usado, tentando executar os srcs com a função canPlayType, caso o navegador atual consiga tocar ele retorna a string com o src.
     *
     * @private
     * @method getSourceCompativel
     * @return string
     */
    var getSourceCompativel = function(id, sources){
        var sourceEscolhido='';
        $.each(sources, function(idx, obj){
            var extensao = obj.substring(obj.length-3, obj.length);
            var media= $('#'+id).get(0);
            if(media.canPlayType && media.canPlayType(media.tagName.toLowerCase()+mediaTypes[extensao]).replace(/no/, '')) {
                sourceEscolhido = obj;
                return false;
            }

        });
        return sourceEscolhido;
    };
//----------------------DECLARAÇÕES-----------------------
    /**
     * Cria um novo objeto do tipo PXLoader framework usado para fazer preload de imagens
     *
     * @private
     * @property loaderImg
     * @type Object
     */
    var loaderImg = new PxLoader();

    /**
     * método que define o request que deve ser feito de acordo com o navegador usado,  caso exista alguma nova regra é só adicionar nos ifs, ele retorna um valor que faz referência a proprieda mapRequest
     *
     * @private
     * @method defineRequest
     */
    var defineRequest = function(navegador){
        if (navegador.indexOf('IE')>=0){
            return 'arraybase64';
        }else if (navegador.indexOf('afari')>=0){
            return 'streaming';
        }else{
            return 'blob';
        }
    };
    /**
     * função que define uma requisição do tipo blob, serve para setar um source dinâmicamente no cache evitando que a tag AUDIO, ou VIDEO faça referência ao src no server funcionando por streaming.
     * a função ja seta o src automáticamente
     *
     * @private
     * @method requisicaoBlob
     */
    var requisicaoBlob = function(mediaSrc, mediaId){
        var xhr = new XMLHttpRequest();
        xhr.open('GET', mediaSrc, true);
        xhr.responseType = 'blob';
        xhr.onerror = function(){
            document.getElementById(mediaId).src = mediaSrc;
            finalizarPreloader(callback);
        }
        xhr.onload = function(e) {
            if (this.status == 200) {
                var myBlob= this.response;
                try {
                    var src = (window.webkitURL ? webkitURL : URL).createObjectURL(myBlob);
                    console.log(src);
                    document.getElementById(mediaId).src = src;
                    finalizarPreloader(callback);
                }catch(ex){
                    console.log(ex);
                    document.getElementById(mediaId).src = mediaSrc;
                    finalizarPreloader(callback);
                }
            }else{
                document.getElementById(mediaId).src = mediaSrc;
                finalizarPreloader(callback);
            }
        };
        xhr.send();

        return document.getElementById(mediaId).src != mediaSrc;
    };
    /**
     * função que define uma requisição do tipo ArrayBuffer, serve para setar um source dinâmicamente usando encode base64 no cache evitando que a tag AUDIO, ou VIDEO faça referência ao src no server funcionando por streaming.
     * a função ja seta o src automáticamente
     *
     * @private
     * @method requisicaoBlob
     */
    var requisicaoArrayBuffer = function(mediaSrc, mediaId){
        var xhr = new XMLHttpRequest();
        xhr.open('GET', mediaSrc, true);
        xhr.responseType = 'arraybuffer';
        xhr.onerror = function(){
            document.getElementById(mediaId).src = mediaSrc;
            finalizarPreloader(callback);
        }
        xhr.onload = function(e) {
            if (this.status == 200) {
                var uInt8Array = new Uint8Array(this.response);
                var i = uInt8Array.length;
                var binaryString = new Array(i);
                while (i--) {
                    binaryString[i] = String.fromCharCode(uInt8Array[i]);
                }
                var data = binaryString.join('');
                var base64 = jQuery.base64.encode(data);
                document.getElementById(mediaId).src = "data:"+mediaTypes[mediaSrc.substring(mediaSrc.length-3, mediaSrc.length)]+";base64," + base64;
                finalizarPreloader(callback);
            }else{
                document.getElementById(mediaId).src = mediaSrc;
                finalizarPreloader(callback);
            }
        };
        xhr.send();
        return document.getElementById(mediaId).src != mediaSrc;
    };
    /**
     * Este mapa tem como objetivo, definir como o src deve ser setado,
     *
     * @private
     * @property mapRequest
     * type Object
     */
    var mapRequest = {
        'arraybase64': function(mediaSrc,mediaId){
            requisicaoArrayBuffer(mediaSrc,mediaId);
        },
        'blob':function(mediaSrc,mediaId){
            requisicaoBlob(mediaSrc,mediaId);
        },
        'streaming':function(mediaSrc,mediaId){
            document.getElementById(mediaId).src=mediaSrc;
            finalizarPreloader(callback);
        }
    }
//----------------------FIM  DECLARAÇÕES-----------------------
    $.each(arquivos.imgs, function (idx, obj) {
        var pxImage = new PxLoaderImage(obj);
        loaderImg.add(pxImage);
    });


    loaderImg.addCompletionListener(function () {
        $.each(arquivos.medias,function(idx, obj){
            if(obj.id!=undefined) {
                qtdDeMediaComId++;
            }
        });
        if(arquivos.medias.length<=0){
            finalizarPreloader();
        }
        $.each(arquivos.medias,function(idx, obj){
            if(obj.id!=undefined){
                var src = getSourceCompativel(obj.id, obj.sources);
                try{
                    mapRequest[defineRequest(navegador)](src,obj.id);
                }catch(ex){
                    document.getElementById(obj.id).src=src;
                    finalizarPreloader();
                }
            }
        })
    });

    loaderImg.addProgressListener(function (e) {
        console.log('Image ' + e.resource.imageNumber + ' Loaded\r');
    });
    loaderImg.start();
}
$(document).ready(function() {

//TweenMax.staggerFrom(".quadrado", 2, {scale:3, opacity:0, delay:0.5, ease:Elastic.easeOut, force3D:true}, 0.1 ,function(){myCompleteAll()});
});